Communication between computers over packet based networks is generally viewed as a multi layer process. Each layer is in charge of different aspects of the communication process and is controlled by different protocols. For example, a file transfer through the Internet comprises: a link layer (also known as layer 2), a network layer (layer 3), a transport layer (layer 4) and an application layer (layer 7). The link layer interfaces the hardware and the physical link between communicating systems. The network layer handles the movement of data through a packet based network, using a protocol such as the IP (Internet protocol). The transport layer provides flow control of data between two computers, using a protocol such as TCP (transmission control protocol). The application layer handles the details of a particular application such as FTP (file transfer protocol). In packet based networks, data is transmitted in units, called datagrams or packets. Generally a packet comprises an application data portion, a network layer header and a transport layer header.
Each communication link in a packet based network generally has a limitation on the maximal size of a packet it can transmit. This maximal size is called the maximum transmission unit (MTU) of the link. For example, Ethernet communication links usually limit a packet to the size of 1500 bytes. When two computers communicate across a network, the smallest MTU of the communication path between the two computers is called the path MTU. The path MTU between two computers may be different in each direction and/or may vary in time due to changes in the links forming the path.
If a router receives a packet, which is larger than the size it can forward in the link leading to the destination of the packet, the router breaks up the packet to smaller fragments, such that each fragment is smaller or equal to the MTU. Each fragment is itself a packet, with its own network layer header and is routed independent of any other packets. Each fragment packet comprises a new network layer header (which is generally a copy of the network layer header of the original packet) and a continuation of the original packet's data. The transport layer header and any specific portion of the application portion are copied only into one of the fragments. Typically, a fragmented packet is not reassembled until it reaches its final destination. If a fragment packet is lost, the original unfragmented packet of which it was a part needs to be retransmitted entirely.
Many Web sites are hosted by a plurality of servers, because of the large number of clients accessing the Web site, the large volume of the information carried by the Web site and/or for redundancy purposes. A load balancer receives the packets directed to the Web site and forwards them to a respective server based on one or more parameters. Load balancers are also used for other purposes, for example, for redirecting HTTP (an Internet browser protocol) requests to a proxy cache.
Some load balancers redirect packets based on the contents of the network layer header of the packet. Other load balancers redirect the packets based on the transport layer header of the packets or the transport layer header and the network layer header. In yet other load balancers, the packets are redirected based on the application data of the packets and optionally some of their header information. Additionally, some load balancers generate separate connections with the servers and the clients and bridge between the separate connections in a procedure referred to as splicing.
A load balancer needs to transfer all packets of a fragmented packet to the same server so that they can be reconstructed by the server. A load balancer which uses information beyond that included in the network layer header will not have enough information to perform load balancing of fragments beyond the first fragment, because the transport layer header and application data are not copied to all the fragments. One solution is for the load balancer to keep a table, such as a fragment control table (FCT), which keeps track of all fragmented packets that arrive at the load balancer until all the packets created from the fragmented packet have been forwarded to a corresponding server. This solution introduces a lot of overhead which affects the performance of the load balancer and adds to the complexity of the load balancer.
Other network elements such as proxies and firewalls, share the need to deal with problems caused by fragmented packets.